package ar.edu.unsam.algo3.plantasvszombies.wicket

import ar.edu.unsam.algo3.plantasvszombies.ui.ApplicationModels.JardinZenAppModel
import org.apache.wicket.markup.html.basic.Label
import org.apache.wicket.markup.html.form.Form
import org.apache.wicket.markup.html.panel.FeedbackPanel
import org.apache.wicket.model.CompoundPropertyModel
import org.apache.wicket.model.PropertyModel
import org.uqbar.commons.model.UserException
import org.uqbar.wicket.xtend.WicketExtensionFactoryMethods
import org.uqbar.wicket.xtend.XAjaxLink
import org.uqbar.wicket.xtend.XLink
import org.uqbar.wicket.xtend.XListView
import ar.edu.unsam.algo3.plantasvszombies.ui.ApplicationModels.JardinAppModel

class JardinZenPage extends MainPage {
	extension WicketExtensionFactoryMethods = new WicketExtensionFactoryMethods
	@Property JardinZenAppModel zenApp = new JardinZenAppModel
	var FeedbackPanel feedbackPanel

	new(JardinAppModel unJardinApp) {
		jardinApp = unJardinApp
		defaultModel = new CompoundPropertyModel(zenApp)

		addChild(menuNavegacion)
		feedbackPanel = new FeedbackPanel("feedbackPanel")
		feedbackPanel.outputMarkupId = true
		zenApp.jardin = jardinApp.jardin
		agregarAcciones

		addChild(formMejoras)
		addChild(formPlantas)
		zenApp.actualizar
	}

	def Form<JardinZenAppModel> formMejoras() {
		val Form<JardinZenAppModel> formMejoras = new Form<JardinZenAppModel>("formMejoras",
			new CompoundPropertyModel<JardinZenAppModel>(zenApp))

		val listView = new XListView("mejorasPosibles")
		listView.populateItem = [ item |
			item.model = item.modelObject.asCompoundModel
			item.addChild(new Label("descripcion"))
			item.addChild(new Label("costo"))
			item.addChild(
				new XAjaxLink<Object>("seleccionar") => [
					onClick = [ target |
						zenApp.mejoraSeleccionada = item.modelObject
						try {
							zenApp.mejorar
							responsePage = this
						} catch (UserException e) {
							formMejoras.error(e.message)
							target.add(feedbackPanel)
						}
					]
				])
		]
		formMejoras.addChild(listView)
		formMejoras.addChild(feedbackPanel)
		formMejoras.addChild(new Label("recursos", new PropertyModel(this, "zenApp.jardin.recursos")))
		formMejoras
	}

	def agregarAcciones() {
	}

	def Form<JardinZenAppModel> formPlantas() {
		val Form<JardinZenAppModel> formPlantas = new Form<JardinZenAppModel>("formPlantas")
		val listView = new XListView("result")
		listView.populateItem = [ item |
			item.model = item.modelObject.asCompoundModel
			item.addChild(new Label("nombre"))
			item.addChild(new Label("defensa"))
			item.addChild(new Label("ataque"))
			item.addChild(new Label("descripcion"))
			item.addChild(
				new XAjaxLink<Object>("mejorar") => [
					onClick = [ target |
						zenApp.plantaSeleccionada = item.modelObject
						target.appendJavaScript("$('#myModal').modal('show')")
					]
				])
		]

		formPlantas.addChild(listView)
		formPlantas.addChild(new Label("jardinZen.tipo"))
		formPlantas.addChild(
			new XLink("siguienteZen") => [
				onClick = [ |
					zenApp.siguienteZen
				]
			])
		formPlantas
	}
}
